home *** CD-ROM | disk | FTP | other *** search
- /*
- IC Button What.c
-
- */
-
- #include <Traps.h>
- #include <QuickDraw.h>
- #include <LowMem.h>
- #include <Icons.h>
-
- #include "IC Window Globals.h"
- #include "IC StrH.h"
- #include "OS Subs.h"
- #include "IC Keys.h"
- #include "IC API.h"
- #include "IC Subs.h"
- #include "IC Dialogs.h"
- #include "IC Misc Subs.h"
- #include "IC Subs.h"
- #include "IC Document.h"
- #include "IC Globals.h"
- #include "IC Windows.h"
-
- #include "IC Button What.h"
-
- Boolean button_highlighted;
-
- void GetIconRect(DialogPtr dlg,short item,Rect* r){
- short width;
-
- GetDItemRect(dlg,item,r);
- width=r->right-r->left;
- r->right=r->left+32;
- r->bottom=r->top+32;
- OffsetRect(r,(width-32)/2,8);
- }
-
- pascal void ButtonDeviceLoopProc(short depth,short deviceFlags,GDHandle targetDevice,long item){
- DialogPtr dlg;
- Rect r,boundary_rect,icon_rect;
- short width;
- RGBColor colour;
- FontInfo font_info;
- Str255 str;
-
- GetPort(&dlg);
- PenNormal();
- GetDItemRect(dlg,item,&r);
- if (button_highlighted){
- if (depth==1)
- PaintRect(&r);
- else {
- colour.red=colour.green=colour.blue=16000;
- RGBBackColor(&colour);
- EraseRect(&r);
- BackColor(whiteColor);
- }
- } else {
- if (depth==1)
- EraseRect(&r);
- else {
- colour.red=colour.green=colour.blue=57015;
- RGBBackColor(&colour);
- EraseRect(&r);
- BackColor(whiteColor);
- }
- }
-
- FrameRect(&r);
- GetIconRect(dlg,item,&icon_rect);
- boundary_rect=icon_rect;
- InsetRect(&boundary_rect,-4,-4);
- EraseRect(&boundary_rect);
- FrameRect(&boundary_rect);
- DrawIcon(200+item,&icon_rect,button_highlighted);
- TextFont(applFont);
- TextSize(9);
- GetFontInfo(&font_info);
- GetAString(str,130,item);
- width=StringWidth(str);
- MoveTo((r.left+(r.right-r.left)/2)-(width/2),r.bottom-2-font_info.descent);
- if (button_highlighted)
- TextMode(srcBic);
-
- DrawString(str);
- TextMode(srcOr);
- }
-
- void DrawButton(DialogPtr dlg,short item,Boolean highlighted){
- Rect r;
- RgnHandle rgn;
- DeviceLoopDrawingUPP dldupp;
-
- button_highlighted=highlighted;
- SetPort(dlg);
-
- if (OurTrapAvailable(_DeviceLoop)){
- GetDItemRect(dlg,item,&r);
- rgn=NewRgn();
- RectRgn(rgn,&r);
- DeviceLoop(rgn,gButtonDeviceLoopProc,item,0);
- DisposeRgn(rgn);
- } else {
- ButtonDeviceLoopProc(1,0,(GDHandle)0,item);
- }
- }
-
- pascal void ButtonUserItemUpdate(DialogPtr dlg,short item){
- DrawButton(dlg,item,false);
- }
-
- OSErr WhatOpenButton(WindowType wt,short item){
- SetDItemHandle(WindowInfo[wt].window,item,(Handle)gButtonUserItemUpdate);
- return noErr;
- }
-
- void ToggleHighlight(DialogPtr dlg,short item,Boolean* highlighted){
- *highlighted=!(*highlighted);
- DrawButton(dlg,item,*highlighted);
- }
-
- OSErr WhatClickButton(WindowType wt,short item,EventRecord* er){
- DialogPtr dlg;
- Boolean highlighted;
- Point mouse_pos;
- Rect r;
- OSErr err=noErr;
-
- dlg=WindowInfo[wt].window;
- GetDItemRect(dlg,item,&r);
- highlighted=false;
-
- do {
- GetMouse(&mouse_pos);
- if (PtInRect(mouse_pos,&r)!=highlighted)
- ToggleHighlight(dlg,item,&highlighted);
- } while (StillDown());
-
- if (highlighted){
- ToggleHighlight(dlg,item,&highlighted);
- err=WindowsOpen((WindowType)WT_Personal+item-1);
- }
-
- return err;
- }
-
- #if 0
-
- void ToggleHighlight2(Boolean* highlighted,short* transfer,Rect* icon_rect,Handle suite,RgnHandle highlight_rgn){
- unsigned char hl;
-
- *highlighted=!(*highlighted);
- if (System7){
- if (*highlighted)
- *transfer=ttSelected;
- else
- *transfer=ttNone;
-
- PlotIconSuite(icon_rect,atNone,*transfer,suite);
- }
- if (Has_ColorQD){
- hl=LMGetHiliteMode();
- hl=(hl&(~(1<<pHiliteBit)));
- LMSetHiliteMode(hl);
- }
- InvertRgn(highlight_rgn);
- }
-
- OSErr WhatClickButton(WindowType wt,short item,EventRecord* er){
- DialogPtr dlg=WindowInfo[wt].window;
- Rect r,icon_rect;
- Boolean highlighted;
- Handle suite;
- short transfer;
- RgnHandle highlight_rgn,tmp_rgn;
- Point mouse_pos;
- OSErr err;
-
- GetIconRect(dlg,item,&icon_rect);
- GetDItemRect(dlg,item,&r);
- suite=(Handle)0;
- highlight_rgn=NewRgn();
- InsetRect(&r,1,1);
- RectRgn(highlight_rgn,&r);
- if (System7){
- GetIconSuite(&suite,200+item,svAllLargeData);
- tmp_rgn=NewRgn();
- IconSuiteToRgn(tmp_rgn,&icon_rect,atNone,suite);
- XorRgn(tmp_rgn,highlight_rgn,highlight_rgn);
- DisposeRgn(tmp_rgn);
- }
-
- highlighted=false;
-
- while (StillDown()){
- GetMouse(&mouse_pos);
- if (PtInRect(mouse_pos,&r)!=highlighted)
- ToggleHighlight2(&highlighted,&transfer,&icon_rect,suite,highlight_rgn);
- }
-
- err=noErr;
- if (highlighted){
- ToggleHighlight2(&highlighted,&transfer,&icon_rect,suite,highlight_rgn);
- err=WindowsOpen((WindowType)WT_Personal+item-1,200+item);
- }
-
- if (suite!=(Handle)0)
- DisposeIconSuite(suite,false);
-
- if (highlight_rgn!=(RgnHandle)0)
- DisposeRgn(highlight_rgn);
-
- return err;
- }
-
- #endif
-
-